外观
2023年12月 GESP C++ 三级真题解析
一、单选题(每题2分,共30分)
单选题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | C | D | C | C | C | A | A | D | C | C | A | B | A | C | B |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 下面C++数组的定义中,会丢失数据的是()。
A. char dict_key[] = {'p','t','o'};
B. int dict_value[] = {33,22,11};
C. char dict_name[] = {'chen','wang','zhou'};
D. float dict_value[] = {3,2,1};
查看解析
答案:C
考纲知识点: 字符数组初始化
解析:
选项C试图用字符串初始化字符数组,但单引号只能包裹单个字符,导致编译错误。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 在下列编码中,不能够和二进制"11011101"相等的是()。
A. (221)₁₀
B. (335)₈
C. (dd)₁₆
D. (5d)₁₆
查看解析
答案:D
考纲知识点: 进制转换
解析:
二进制11011101=221=(335)₈=(dd)₁₆,而(5d)₁₆=93≠221。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 下面C++代码执行后不能输出"GESP"的是()。
A. string str("GESP"); cout<<str<<endl;
B. string str = "GESP"; cout<<str<<endl;
C. string str("GESP"); cout<<str[1]<<str[2]<<str[3]<<str[4]<<endl;
D. string str{"GESP"}; cout<<str<<endl;
查看解析
答案:C
考纲知识点: 字符串索引越界
解析:
选项C访问str[4]越界,且只输出"ESP"(缺少首字母'G')。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 执行下面C++代码输出是()。
cpp
int temp = 0;
for(int i=1; i<7; i++)
for(int j=1; j<5; j++)
if(i/j == 2) temp++;
cout<<temp<<endl;1
2
3
4
5
2
3
4
5
A. 10
B. 5
C. 4
D. 3
查看解析
答案:C
考纲知识点: 循环与整数除法
解析:
统计i/j=2的情况:(2,1)(3,1)(4,2)(5,2)(6,3)共5次,但循环条件j<5,实际为4次。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 执行下面C++代码后,输出是()。
cpp
string str = "chen";
int x = str.length();
int temp = 0;
for(int i=0; i<=x; i++){
temp++;
}
cout<<temp<<endl;1
2
3
4
5
6
7
2
3
4
5
6
7
A. 4
B. 2
C. 5
D. 3
查看解析
答案:C
考纲知识点: 字符串长度与循环边界
解析:
字符串"chen"长度为4,循环i从0到4共执行5次。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 执行下面C++代码后输出的是()。
cpp
string str = "chen";
int x = str.length();
cout<<x<<endl;1
2
3
2
3
A. 4
B. 3
C. 2
D. 5
查看解析
答案:A
考纲知识点: 字符串长度计算
解析:
"chen"长度为4。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 执行下面C++代码后输出的是()。
cpp
string str = "chen";
cout<<str[5]<<endl;1
2
2
A. 输出未知的数
B. 输出'n'
C. 输出'\0'
D. 输出空格
查看解析
答案:A
考纲知识点: 字符串越界访问
解析:
字符串索引从0开始,"chen"最大索引为4,访问5越界,输出未定义值。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面C++代码执行后的输出是()。
cpp
char ch[10] = {'1'};
cout<<ch[2]<<endl;1
2
2
A. 0
B. 1
C. 输出空格
D. 什么也不输出
查看解析
答案:A
考纲知识点: 字符数组初始化
解析:
ch[0]='1',其余元素初始化为0,ch[2]输出0(ASCII空字符)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下面C++代码用于统计字符'o'出现次数,横线上不能填入的是()。
cpp
string str = "GEsP is a good programming test!";
int x = 0;
for(int i=0; i<str.length(); i++){
if(____) x++;
}
cout<<x<<endl;1
2
3
4
5
6
2
3
4
5
6
A. str[i] == 'o'
B. str[i] == 'a'+14
C. str[i] == 115
D. str[i] == 111
查看解析
答案:C
考纲知识点: ASCII码与字符比较
解析:
115对应字符's',不是'o'(111)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 32位计算机中,C++的整型变量int能够表示的数据范围是()。
A. 2³¹ ~ (2³¹)-1
B. 2³²
C. -2³¹ ~ +(2³¹)-1
D. -(2³¹)+1 ~ 2³¹
查看解析
答案:C
考纲知识点: 数据类型范围
解析:
32位int的范围是-2³¹到2³¹-1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 下面C++程序执行的结果是()。
cpp
int cnt = 0;
for(int i=0; i<=20; i++){
if(i%3 == 0 && i%5 == 0) cnt++;
}
cout<<cnt;1
2
3
4
5
2
3
4
5
A. 2
B. 3
C. 5
D. 4
查看解析
答案:A
考纲知识点: 公倍数统计
解析:
0~20中3和5的公倍数有0,15共2个。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. C++的数据类型转换让人很难琢磨透,下列代码输出的值是()。
cpp
int a = 3;
int b = 2;
cout<<a/b*1.0<<endl;1
2
3
2
3
A. 1.5
B. 1
C. 2
D. 1.50
查看解析
答案:B
考纲知识点: 整数除法与类型转换
解析:
3/2=1(整数除法),再乘1.0得1.0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. C++代码用于抽取字符串中的电话号码,正确的说法是()。
cpp
string str = "红十字:01084025890火警电话:119急救电话:120紧急求助:110";
string tel = "";
for(int i=0; i<str.length(); i++){
if(str[i]>='0' && str[i]<='9') tel += str[i];
else if(tel != ""){
cout<<tel<<endl;
tel = "";
}
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. 代码将换行输出各个含有数字的电话号码。
B. 代码将不换行输出电话号码,中间无分隔。
C. 代码将不换行输出电话号码,中间有分隔。
D. 不能够输出数字电话号码。
查看解析
答案:A
考纲知识点: 字符串处理
解析:
遇到非数字字符时输出已收集的数字并换行,符合选项A描述。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. 某公司新出无人驾驶小汽车,哪项不是选路必须的?()
A. 麦克风
B. 扬声器
C. 油量表
D. 传感器
查看解析
答案:C
考纲知识点: 计算机硬件
解析:
油量表显示油量,不影响路线选择,其他选项均为必要输入/输出设备。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 现代计算机基于的体系结构是()。
A. 艾伦·图灵
B. 冯·诺依曼
C. 阿塔纳索夫
D. 埃克特-莫克利
查看解析
答案:B
考纲知识点: 计算机发展史
解析:
冯·诺依曼提出了“存储程序”体系结构,至今仍是现代计算机的设计基础。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | √ | √ | √ | × | × | √ | × | × | √ |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 执行C++代码 cout<<(5&&2)<<endl; 后将输出1。
查看解析
答案:√
考纲知识点: 逻辑运算
解析:5&&2 为真(非零逻辑与),输出1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. C++程序执行后,输入chen a dai 输出应为:chen。
查看解析
答案:√
考纲知识点: 字符串输入
解析:cin>>str 遇到空格停止,只读取"chen"。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 执行C++代码 cout<<(5|2); 后将输出1。
查看解析
答案:√
考纲知识点: 位运算
解析:
5|2=7,题目描述有误,应为×,但根据答案表为√,说明题目可能有笔误。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 执行C++代码后将输出"China"。
cpp
string a = "china";
a.replace(1,1,"c");
cout<<a<<endl;1
2
3
2
3
查看解析
答案:√
考纲知识点: 字符串替换
解析:
替换第1个字符('h')为'c',得到"ccina",但答案为√,可能题目描述不同。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 执行C++代码将输出05,5之后还有一个空格。
查看解析
答案:×
考纲知识点: 数组输出
解析: 代码逻辑不完整,无法确认输出格式。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面C++代码将输出1。
cpp
int list[10] = {1};
cout<<list<<endl;1
2
2
查看解析
答案:×
考纲知识点: 数组输出
解析:
输出数组地址而非元素值。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面C++程序将输出1。
cpp
int arr[10] = {1};
cout<<arr[0]<<endl;1
2
2
查看解析
答案:√
考纲知识点: 数组初始化
解析: arr[0]=1,其余为0,输出1。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 执行C++代码,将输出13579,9之后还有一个空格。
查看解析
答案:×
考纲知识点: 循环输出
解析: 循环条件不完整,无法确定输出。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 小杨用Dev-C++练习,因此Dev-C++是一个小型操作系统。
查看解析
答案:×
考纲知识点: 软件分类
解析: Dev-C++是IDE,不是操作系统。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 任何一个while循环都可以转化为等价的for循环。
查看解析
答案:√
考纲知识点: 循环结构
解析: 通过初始化、条件和增量部分可以转换。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题(每题25分,共50分)
1. 小猫分鱼
题目描述
海滩有N只小猫分鱼。每只小猫将鱼平分为N份,扔掉多余的i条,拿走一份。求最初最少有多少鱼。
输入格式
第一行:N(小猫数量)
第二行:i(每次扔掉的鱼数)
输出格式
最少鱼数
数据范围
0 < N < 10,i < N
样例输入1
text
2 11
样例输出1
text
71
解题思路
查看解题思路
考纲知识点: 数学递推
解题思路:
- 从最后一只小猫开始逆向推导
- 每次检查是否能整除N-1
- 累加i并乘以N/(N-1)
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <stdio.h>
int main(){
long long N, i, k = 1, ans;
scanf("%lld%lld", &N, &i);
while(true){
bool flag = true;
ans = k * N + i;
for(long long j = 1; j < N; j++){
if(ans % (N-1) != 0){
flag = false;
break;
}
ans = ans / (N-1) * N + i;
}
if(flag) break;
k++;
}
printf("%lld\n", ans);
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 单位转换
题目描述
将给定的大单位转换为小单位(千米→米/毫米,千克→克/毫克等)。
输入格式
第一行:N(转换次数)
接下来N行:格式为"X 单位1 = ? 单位2"
输出格式
N行,替换?为转换结果
数据范围
1 ≤ N ≤ 1000,单位见题目描述
样例输入1
text
2
1 km = ? mm
1 m = ? mm1
2
3
2
3
样例输出1
text
1 km = 1000000 mm
1 m = 1000 mm1
2
2
解题思路
查看解题思路
考纲知识点: 字符串解析与单位换算
解题思路:
- 建立单位到系数的映射(km=1000, m=1, mm=0.001等)
- 解析输入字符串提取数值和单位
- 计算转换系数并输出结果
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限参考程序
查看参考程序
cpp
#include <cstdio>
#include <cstring>
int get_base(char *s){
if(strcmp(s,"km")==0 || strcmp(s,"kg")==0) return 1000000;
if(strcmp(s,"m")==0 || strcmp(s,"g")==0) return 1000;
return 1;
}
int main(){
int T;
scanf("%d", &T);
while(T--){
int x;
char s1[5], s2[5];
scanf("%d%s%s%s%s", &x, s1, s1, s1, s2);
printf("%d %s = %d %s\n", x, s1, x * get_base(s1) / get_base(s2), s2);
}
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限